#ifndef _GWBASE_BASE64_H_
#define _GWBASE_BASE64_H_

#include "gwbase/byte_array.h"
#include <string>

namespace dicom {

class Base64Helper {
 public:
  static bool Encode(const ByteArray &data, ByteArray &out);
  static std::string Encode(const ByteArray &data);
  static std::string Encode(const std::string &hexdata);

  static bool Decode(const ByteArray &data, ByteArray &out);
  static bool Decode(const std::string &data, ByteArray &out);
};

// see http://en.wikipedia.org/wiki/Base64#URL_applications
// '+' --> '-'
// '/' --> '_'
// '=' --> '.'
class UrlBase64Helper {
 public:
  static std::string Encode(const ByteArray &data);
  static std::string EncodeTrimLast(const ByteArray &data);
  static std::string EncodeTrimLast(const std::string &data);
  static bool Decode(const std::string &data, ByteArray &out);
};
}

#endif  //  _GWBASE_BASE64_H_
